package com.example.alibabavodossservice.vod.video;

import com.alibaba.fastjson.JSONObject;
import com.example.alibabavodossservice.CheckTools;
import com.example.alibabavodossservice.vod.BaseUploadParameter;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import javax.validation.constraints.NotNull;
import java.util.HashMap;
import java.util.List;
import java.util.stream.IntStream;

/**
 * desc: 上传请求实体类参数
 *
 * @author xugenyin
 */
@Data
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
public class VideoParameter extends BaseUploadParameter {
    /**
     * 文件名
     */
    @NotNull(message = "文件名不能为空")
    private String fileName;
    /**
     * 标题
     */
    @NotNull(message = "文件标题不能为空")
    private String title;
    /**
     * 音视频封面URL
     */
    private String coverURL;

    /**
     * UserData
     */
    private  String userData;
    /**
     * 工作流ID
     */
    private String workflowId;
    /**
     * 转码模板组ID
     */
    private String templateGroupId;

    /**
     * 检查必要参数
     *
     * @param param param
     */
    public static void checkMustParam(VideoParameter param) {
        if (CheckTools.isNullOrEmpty(param.getFileName()) || CheckTools.isNullOrEmpty(param.getTitle())) {
            throw new IllegalArgumentException("文件名和标题不能为空");
        }
    }


    /**
     * 构建UserData
     *
     * @param keys 用户自定义参数键值对
     * @return
     */
    public static String buildUserData(List<HashMap<String, Object>> keys) {
        JSONObject userData = new JSONObject();
        IntStream.range(0, keys.size())
                .forEach(i -> {
                    HashMap<String, Object> keyMap = keys.get(i);
                    keyMap.keySet().stream()
                            .forEach(key -> {
                                Object value = keyMap.get(key);
                                userData.put("Data" + i, new JSONObject().put(key, value));
                            });
                });
        //---------------即以下形式-----------------------------------
        //消息回调设置
//        JSONObject messageCallback = new JSONObject();
//        messageCallback.put("CallbackType", "http");
//        messageCallback.put("CallbackURL", "https://xxxxx.com/2016-08-15/proxy/httpcallback/testcallback/");
//        userData.put("MessageCallback", messageCallback);
//
//        //透传字段（可以透传用户自定义参数）
//        JSONObject extend = new JSONObject();
//        extend.put("id", "028a8e56b*****1ebf6bb7afc74");
//        extend.put("width", 1280);
//        extend.put("height", 720);
//        userData.put("Extend", extend);
//
//        //上传加速设置 （上传时需要使用加速服务才设置）（按需设置，需单独申请开通）
//        JSONObject accelerateConfig = new JSONObject();
//        accelerateConfig.put("Type", "oss");
//        accelerateConfig.put("Domain", "https://oss-accelerate.aliyuncs.com");
//        userData.put("AccelerateConfig", accelerateConfig);
        return userData.toJSONString();
    }
}


